package com.liu.lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Lamdba9 {

    public static void main(String[] args) {


        List<Integer> sumList = new ArrayList<Integer>();

        Collections.addAll(sumList, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        //常用的Lambda表达式 对应的函数接口

        //1.Predicate<T>    判断其是否为真
        //其方法体 boolean test(T t);

        //使用方法
        Predicate<Integer> myPredicate = (ele) -> {
            if (ele == 10) {
                return true;
            } else {
                return false;
            }
        };

        //实例
        boolean a = sumList.removeIf((ele) -> {
                    if (ele == 10) {
                        return true;
                    } else {
                        return false;
                    }
                }
        );



        //2.Consumer<T>
        //其方法体 void accept(T t);

        //使用方法
        Consumer<Integer> consumer = (ele) -> System.out.println(ele);

        //实例
        sumList.forEach(integer -> System.out.println(integer));


        //3. Comparator<T> 进行比较并返回对比值
        //int compare(T o1, T o2)

        //使用方法
        Comparator<Integer>  comparator = ((o1, o2) -> {
            if(o1 > o2 ){
                return 1;
            }else{
                return -1;
            }
        });

        //实例
        sumList.sort((o1, o2) -> {
            return o2 - o1;
        });

        sumList.forEach(integer -> System.out.println(integer));


        //3.Function<T, R>
        //其方法体 R apply(T t);
        //使用方法
        Function<Integer, Integer> function = (intA)-> intA + 10;

        Function<Integer, String> function2 = (intA)-> intA.toString();

        //实例
        StringBuilder stringBuilder = new StringBuilder();
        sumList.forEach((intA)-> stringBuilder.append(intA.toString()));
        System.out.println(stringBuilder);



        //4.Supplier<T> 无参数有返回
       // T get();
        //使用方法
        Supplier<String> supplier = ()->"hello world!";

        //实例 获取默认值
//        Person  person =  Person::new;
//        };

    }


}
